// request.js文件
import axios from 'axios'
import ElementUI from 'element-ui';
import storage from '../model/Storage.js'

axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8'
// 创建axios实例
const service = axios.create({
  // axios中请求配置有baseURL选项，表示请求URL公共部分
  baseURL: process.env.VUE_APP_BASE_API,
  // 超时
  timeout: 100000
})
// 请求拦截器
service.interceptors.request.use(config => {
  // 每次发送请求之前都检测vuex是否存有token,放在请求头发送给服务器
  // Authorization是根据后端自定义字段
  config.headers.Authorization = storage.get('token') ? storage.get('token') : null;
  return config;
}, (e) => {
  // console.log('在request拦截器显示错误:', e)
  return Promise.reject(e)
});
// 响应拦截器
service.interceptors.response.use((response) => {
  // 在status正确的情况下，code不正确则返回对应的错误信息（后台自定义为200是正确，并且将错误信息写在message），正确则返回响应
  // return response.data.code == 200 ? response : Promise.reject(response.data.message);
  // console.log('在response拦截器显示信息:', response)
  let res = response.data
  // 如果是返回的文件
  // if (response.config.responseType === 'blob') {
  //   return res
  // }

  if (res.code === 403 || res.code === 401) {
    ElementUI.Message(
      {
        message: res.msg,
        type: 'error'
      }
    )
    this.$router.push({ path: '/login' }).catch(() => {});
  }

  // 兼容服务端返回的字符串数据
  if (typeof res === 'string') {
    res = res ? JSON.parse(res) : res
  }

  return res;
}, (e) => {
  // console.log('在response拦截器显示错误:', e)
  return Promise.reject(e)
});
export default service;
